package game.controler;

import game.Utils;
import game.controler.ecouteurs.vue.EcouteurFleche;
import game.controler.gestionnaires.elementjeu.GestionnairePlans;
import game.model.Fleche;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JLabel;

/**
 *
 * @author Gab'z
 */
public class ServeurFleches {

    private static ServeurFleches serveurFleches = null;
    private GestionnairePlans Gplans = GestionnairePlans.getGP();
    private ImageIcon fNordVide = null;
    private ImageIcon fEstVide = null;
    private ImageIcon fSudVide = null;
    private ImageIcon fOuestVide = null;
    private ImageIcon fNordPleine = null;
    private ImageIcon fEstPleine = null;
    private ImageIcon fSudPleine = null;
    private ImageIcon fOuestPleine = null;

    public ServeurFleches() {
        System.out.println("Singleton ServeurFleches");
    }

    public static ServeurFleches getServeurFleches() {
        if (serveurFleches == null) {
            serveurFleches = new ServeurFleches();
        }
        return serveurFleches;
    }

    /**
     * Construit le JLabel contenant la flèche à afficher
     * @param idPlan
     * @param direction
     * @return 
     */
    public JLabel getLabelFleche(String idPlan, Integer direction) {
        Fleche fleche = Gplans.getPlan(idPlan).getFleche(direction);
        JLabel labelFleche = null;
        if (fleche.isActif()) {
            // Flèche pleine
            switch (direction) {
                case 0: // NORD
                    labelFleche = new JLabel(getFlecheNordPleine());
                    break;
                case 1: // EST
                    labelFleche = new JLabel(getFlecheEstPleine());
                    break;
                case 2: // SUD
                    labelFleche = new JLabel(getFlecheSudPleine());
                    break;
                case 3: // OUEST
                    labelFleche = new JLabel(getFlecheOuestPleine());
                    break;
            }
            labelFleche.addMouseListener(new EcouteurFleche(fleche.getIdPlanSuivant()));
        } else {
            // Flèche vide
            switch (direction) {
                case 0: // NORD
                    labelFleche = new JLabel(getFlecheNordVide());
                    break;
                case 1: // EST
                    labelFleche = new JLabel(getFlecheEstVide());
                    break;
                case 2: // SUD
                    labelFleche = new JLabel(getFlecheSudVide());
                    break;
                case 3: // OUEST
                    labelFleche = new JLabel(getFlecheOuestVide());
                    break;
            }
        }
        return labelFleche;
    }

    private ImageIcon getFlecheNordPleine() {
        if (fNordPleine == null) {
            if (Utils.mode == Utils.LOCAL) {
                fNordPleine = new ImageIcon(Utils.baseURLlocal + "fleches\\" + "nord_p" + Utils.format_img);
            } else {
                try {
                    fNordPleine = new ImageIcon(new URL(Utils.baseURL + "fleches\\" + "nord_p" + Utils.format_img));
                } catch (MalformedURLException ex) {
                    System.err.println("Erreur lors de la récupération de la flèche nord pleine");
                }
            }
        }
        return fNordPleine;
    }

    private ImageIcon getFlecheEstPleine() {
        if (fEstPleine == null) {
            if (Utils.mode == Utils.LOCAL) {
                fEstPleine = new ImageIcon(Utils.baseURLlocal + "fleches\\" + "est_p" + Utils.format_img);
            } else {
                try {
                    fEstPleine = new ImageIcon(new URL(Utils.baseURL + "fleches\\" + "est_p" + Utils.format_img));
                } catch (MalformedURLException ex) {
                    System.err.println("Erreur lors de la récupération de la flèche est pleine");
                }
            }
        }
        return fEstPleine;
    }

    private ImageIcon getFlecheSudPleine() {
        if (fSudPleine == null) {
            if (Utils.mode == Utils.LOCAL) {
                fSudPleine = new ImageIcon(Utils.baseURLlocal + "fleches\\" + "sud_p" + Utils.format_img);
            } else {
                try {
                    fSudPleine = new ImageIcon(new URL(Utils.baseURL + "fleches\\" + "sud_p" + Utils.format_img));
                } catch (MalformedURLException ex) {
                    System.err.println("Erreur lors de la récupération de la flèche sud pleine");
                }
            }
        }
        return fSudPleine;
    }

    private ImageIcon getFlecheOuestPleine() {
        if (fOuestPleine == null) {
            if (Utils.mode == Utils.LOCAL) {
                fOuestPleine = new ImageIcon(Utils.baseURLlocal + "fleches\\" + "ouest_p" + Utils.format_img);
            } else {
                try {
                    fOuestPleine = new ImageIcon(new URL(Utils.baseURL + "fleches\\" + "ouest_p" + Utils.format_img));
                } catch (MalformedURLException ex) {
                    System.err.println("Erreur lors de la récupération de la flèche ouest pleine");
                }
            }
        }
        return fOuestPleine;
    }

    private ImageIcon getFlecheNordVide() {
        if (fNordVide == null) {
            if (Utils.mode == Utils.LOCAL) {
                fNordVide = new ImageIcon(Utils.baseURLlocal + "fleches\\" + "nord_v" + Utils.format_img);
            } else {
                try {
                    fNordVide = new ImageIcon(new URL(Utils.baseURL + "fleches\\" + "nord_v" + Utils.format_img));
                } catch (MalformedURLException ex) {
                    System.err.println("Erreur lors de la récupération de la flèche nord vide");
                }
            }
        }
        return fNordVide;
    }

    private ImageIcon getFlecheEstVide() {
        if (fEstVide == null) {
            if (Utils.mode == Utils.LOCAL) {
                fEstVide = new ImageIcon(Utils.baseURLlocal + "fleches\\" + "est_v" + Utils.format_img);
            } else {
                try {
                    fEstVide = new ImageIcon(new URL(Utils.baseURL + "fleches\\" + "est_v" + Utils.format_img));
                } catch (MalformedURLException ex) {
                    System.err.println("Erreur lors de la récupération de la flèche est vide");
                }
            }
        }
        return fEstVide;
    }

    private ImageIcon getFlecheSudVide() {
        if (fSudVide == null) {
            if (Utils.mode == Utils.LOCAL) {
                fSudVide = new ImageIcon(Utils.baseURLlocal + "fleches\\" + "sud_v" + Utils.format_img);
            } else {
                try {
                    fSudVide = new ImageIcon(new URL(Utils.baseURL + "fleches\\" + "sud_v" + Utils.format_img));
                } catch (MalformedURLException ex) {
                    System.err.println("Erreur lors de la récupération de la flèche sud vide");
                }
            }
        }
        return fSudVide;
    }

    private ImageIcon getFlecheOuestVide() {
        if (fOuestVide == null) {
            if (Utils.mode == Utils.LOCAL) {
                fOuestVide = new ImageIcon(Utils.baseURLlocal + "fleches\\" + "ouest_v" + Utils.format_img);
            } else {
                try {
                    fOuestVide = new ImageIcon(new URL(Utils.baseURL + "fleches\\" + "ouest_v" + Utils.format_img));
                } catch (MalformedURLException ex) {
                    System.err.println("Erreur lors de la récupération de la flèche ouest vide");
                }
            }
        }
        return fOuestVide;
    }
}
